An operating system executing on one or more processors of a computing device may be divided into two execution modes: (1) a user mode and (2) a kernel mode (also referred to as a system mode). An application may include one or more processes. Each process may include one or more threads. Each thread may include one or more subroutines or methods in an execution stack. The operating system may switch which execution mode it is running in depending on the thread. Each application may be initiated in the user mode. In some embodiments, a process in the user mode cannot access memory addresses outside its own allocated memory addresses, such as the kernel or other applications. The kernel may refer to a controller of multiple processes. When a process attempts to access services outside the application, the operating system may switch temporarily to the kernel mode. While in kernel mode, the process can access any memory address, including those outside the memory addresses allocated to the process.